E) return Reference

int a=30; // Rvalue 30 a
return reference
int& FunctionOne(int& a){
a++;
return a;
}
int FunctionTwo(int& a){
a++;
return a;
}
FunctionOne은 참조자를 반환하고,
FunctionTwo는 변수를 반환한다.

참조자를 반환하게 되면, 실제 객체 그 자체를 반환한다.(Lvalue 속성)
(리턴 변수가 지역변수인 경우, 소멸 시점에 주의해야 함)
변수를 반환하게 되면, return뒤의 객체를 복사된 것을 반환한다.(Rvalue 속성)
int num1;
int num2=FuncOne(num1); // num1 num2
int num1;
int& num2=FuncOne(num1); // num1 num2
int에 int&를 리턴받은 경우, 값을 복사한다.
int num1;
int num2=FuncTwo(num1); // num1 num2
int num1;
int& num2=FuncTwo(num1); // error:
지역변수의 레퍼런스를 반환하면 안됨
#include <iostream>
using std::cout;
using std::endl;
int& function(void){
int val=10;
return val;
}
int main(void){
int& ref=function();
cout<<ref<<endl; //
return 0;
}